package Misil.Comportamientos;


/**
 * @brief Clase EsperarASerLanzado: Define el comportamiento del MisilAliado cuando
 * 		  este esta esperando a que una bateria lo lance.
 * @author Marcelo
 * @version 1.0
 * @created 12-nov-2013 01:09:05 p.m.
 */

public class EsperarASerLanzado implements ComportamientoMisilAliado {
	//Campos de la clase EsperarASerLanzado
	private int tipoMovimiento=0;
	private double[] vectorVelocidad;
	private double[] objetivo;
	
	/**
	 * @brief Constructor Predeterminado
	 */
	public EsperarASerLanzado(){
		vectorVelocidad = new double[3];
		vectorVelocidad[0]=0;
		vectorVelocidad[1]=0;
		vectorVelocidad[2]=0;
		objetivo=new double[3];
		objetivo[0]=0;
		objetivo[1]=0;
		objetivo[2]=0;
	}
	
	public EsperarASerLanzado(Object objeto){
		vectorVelocidad = new double[3];
		vectorVelocidad[0]=0;
		vectorVelocidad[1]=0;
		vectorVelocidad[2]=0;
		objetivo=(double[]) objeto;
	}


	/**
	 * @brief Metodo que devuelve el tipo de movimiento actual de un determinado "misil".
	 * 		  (conceptualmente no seria del misil, pero bueno)
	 * @return tipo de movimiento del patron de comportamiento adoptado actualmente.
	 */
	public int getTipoMovimiento(){
		return tipoMovimiento;
	}


	/**
	 * @brief Esta funcion no hace nada en este caso. Es meramente para cumplir con la interface
	 */
	public void setObjetivo(Object objeto) {
		objetivo=(double[]) objeto;
		//System.out.println("Nuevo Objetivo: "+objetivo[0]+";"+objetivo[1]+";"+objetivo[2]);
	}
	
	/**
	 * @brief Esta funcion no hace nada en este caso. Es meramente para cumplir con la interface
	 * @return null
	 */
	public Object getObjetivo() {
		return objetivo;
	}
	
	
	/**
	 * @brief Metodo que establece un nuevo valor para el vector de velocidad
	 * @param vector
	 */
	public void setVectorDeVelocidad(double[] vector) {
		vectorVelocidad=vector;
		
	}


	/**
	 * @brief Funcion que devuelve el vector de velocidad del misil. Este vector indica como
	 * 		  se va a mover el misil en cada avance de tiempo y su modulo es la velocidad
	 * 		  del misil.
	 * @return vectorVelocidad del misil.
	 */
	public double[] getVectorDeVelocidad() {
		return vectorVelocidad;
	}
	
	/**
	 * @brief No hace nada. Es para cumplir con la interface
	 */
	public boolean objetivoAlcanzado(double[] posicion) {
		return false;
	}
	
	/**
	 * @brief No hace nada. Es para cumplir con la interface
	 */
	public double[] invertirVelocidad(double[] velocidad){
		return null;
	}
}
